©Copyright Peter Kan 2005-09-17 1
MINNESHANTERING I DOS
(DOSSESSION)
INLEDNING
Vi inriktar oss på att göra minneshantering på DOS 5.0 bas, men
grundläggande är kunskapen densamma på högre versioner av DOS.
DOS 6.X skiljer sig något från DOS 5.0, i bland annat följande
avseenden:
DOS 6.X har ett hjälpmedel för minneshantering, nämligen
MEMMAKER, men en PC-tekniker gör minneshanteringen lika bra
”manuellt”, ibland kanske bättre.
DOS 6.X presenterar MEM /C annorlunda.
DOS 6.X med MEMMAKER talar om var och när TSR skall
laddas.
I DOS 6.X kan man ha olika uppstartsalternativ, hoppa över delar av
CONFIG.SYS och AUTOEXEC.BAT eller helt kringgå startfilerna.
Smartdrv laddas olika i DOS 5.0 och DOS 6.X
Varför skall man bry sig om minneshantering?
Undvika krockar, såväl mjuk som hårdvara.
Utnyttja minnet helt.
Optimalt resursutnyttjande.
Ge plats för program (IBMs beslut om reserverade minnesadresser för
hårdvara).
Kunna använda program i Windows som är DOS-baserade.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 2
HISTORIA
I juni 1978 skapades 8086-processorn som blev den första processorn
i INTEL-familjen. 8086:an var en 16/16-bitars processor (se tabell 1)
med 20 adressben vilken kunde adressera till den ”fantastiskt” höga
minnesarean 1MB (se tabell 2). Detta ansågs som en ouppnåelig
gräns.
8086 kördes i Real mode, vilket innebär att max 1MB minne kan
användas.
Skapandet av ett operativsystem sattes igång och DOS 1.0 kom till
världen. IBM reserverade rutiner för BIOS, grafikhantering m.m.
(ROM) i adresserna för de övre 384kB, kvar återstod 640kB för DOS.
Nu började alla programtillverkare att skapa program till PC under
dessa rådande förutsättningar. Ingen anade att en gräns skulle nås.
Men när kalkylprogrammen började dyka upp, förstod man att 640kB
inte skulle räcka till. Lösningen blev minnesexpansionskort.
Lotus, Intel och Microsoft gick samman för att enas om en standard
(L-I-M), för att kunna hantera detta expanderade minne.
Resultatet blev minneshanteraren EMM (Expanded Memory
Manager).
Det expanderade minnet kallas EMS-minne för att det just följer
standarden för Expanded Memory Specification.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 3
Processorernas olika körlägen
Eftersom DOS måste upprätthålla bakåtkompatibiliteten, kan DOS
aldrig direkt adressera mer än 1 MB minne. För att DOS skall kunna
använda minnet ovanför 1 MB måste man utnyttja en metod för att
koppla om processorn.
8086
Arbetar i real mode (real läge eller DOS-läge) och kan adressera max
1 MB minne.
80286
Kan arbeta i två lägen:
Real mode och Protected mode (skyddat läge).
I Real mode arbetar den som en 8086:a och kan adressera max 1 MB
RAM.
I Protected mode arbetar den som en 80286:a och kan adressera 16
MB RAM.
80386 och bättre
Har tre arbetslägen:
I Real mode arbetar den som en 8086:a och kan adressera max 1 MB
RAM. I Protected mode arbetar den som en 80386:a och kan adressera
max 4 GB RAM.
Dessutom har den ytterligare ett läge:
Virtual 8086 mode eller V-86.
I V-86 mode kan den köra flera program samtidigt. Varje program
luras att tro att det körs på en egen 8086:a och har ett eget
adressutrymme på max 1 MB.
8086
80286
80386 och bättre
Real
8086 - 1 MB
8086 - 1 MB
8086 - 1 MB
Skyddat
Nej
80286 - 16 MB
80386 - 4 GB
Virtuellt
Nej
Nej
8086 - 1 MB*x
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 4
8088-processorn, som återfinnes i PC och XT, har 20 adresslinjer,
numrerade A0-A19, och kan adressera 2
20
= 1024kB minne. Om man
ställer adressräkaren på den högsta adressen (1024kB-1) och lägger
till 1 så slår räknaren över till adress 0.
De program som har skrivits till 8088-processorn utgår från att
processorn utför en sådan minnesadressering, såsom MS-DOS och de
program som kan köras under MS-DOS.
En efterföljare till 8088-processor, Intels 80286-processor, har 24
adresslinjer, numrerade A0-A23, och kan därmed adressera 16MB. På
en 80286-processor slår inte adressräkaren om till 0 när den passerar
1024kB-gränsen, utan fortsätter upp till 16MB.
Program skrivna till en 8088-processor, även MS-DOS, skulle behöva
skrivas om för att passa en 80286-processor. Men Intel konstruerade
286-processorn så att den kan köras i två olika lägen; Protected Mode
där hela minnet är åtkomligt och Real Mode där 80286-processorn
uppför sig som en 8088-processor, men istället för att börja om på
adress 0 när man passerar 1024kB så fortsätter adressräknaren hos
286-processor i Real Mode ända upp till 1088kB (nästan) innan den
slår om. Minnesytan mellan 1024kB och 1088kB kallas High Memory
Area, HMA.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 5
Tabell 1.
Bitar - Extern/Intern databuss.
<<Se The Hardware Bible för mer info!>>
Tabell 2.
>
1.048.576
d.v.s.
1MB
>
16.777.216
d.v.s.
16 MB
>
4.294.967.296
d.v.s.
4 GB
>
68.719.476.736
d.v.s.
64 GB
Mikroprocessor
Bitar
Megabyte
Adressben
8086
16/16
1
20
8088
8/16
1
20
80286
16/16
16
24
80386SX
16/32
16
24
80386
32/32
4096
32
80486SX
32/32
4096
32
80486
32/32
4096
32
PENTIUM
2x32/64
4096
32
A0
A1
A2
A3
A4
A5
A6
A7
1
2
4
8
16
32
64
128
A8
A9
A10
A11
A12
A13
A14
A15
256
512
1k
2k
4k
8k
16k
32k
A16
A17
A18
A19
A20
A21
A22
A23
64k
128k
256k
512k
1M
2M
4M
8M
X
X
A24
A25
A26
A27
A28
A29
A30
A31
16M
32M
64M
128M
256M
512M
1G
2G
X
X
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 6
RAMMINNE
Alla delar av stapeln hanteras olika
och det är programvaran som
bestämmer vilket minne man har
behov av.
Det finns ingen generell regel.
Adresserna för det s.k. reserverade
minnet var från början enbart
avsett för hårdvara men genom
minneshantering så kan vi numera
adressera delar av det reserverade
minnet för mjukvara.
XMS = EXTENDED MEMORY SPECIFICATION - UTÖKAT MINNE
EMS = EXPANDED MEMORY SPECIFICATION - EXPANDERAT MINNE
HMA = HIGH MEMORY AREA - HÖGA MINNET
UMB = UPPER MEMORY BLOCK - ÖVRE MINNES BLOCK
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 7
ADRESSERING AV MINNE
DOS använder sig av
segmentadressering.
Segmentet A000 innefattar den
fysiska adressen A0000 till A000F.
Detta betyder att varje segment är
16B (0 till F Hex. = 0 till 15 Dec.).
De övre minnesadresserna kan
indelas i 6 block, från A till F.
Varje block får då en storlek av
64kB.
Ex.
A000 till AFFF = 16*16*16 = 4096
4096*16B = 65536B = 64 kB
(65536B / 1024 = 64kB)
Det går med andra ord inte att specificera
en exakt minnesadress.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 8
HIMEM.SYS
Vi börjar med HIMEM.SYS. Vad gör HIMEM.SYS?
Tar 64kB(-16B) över 1024kB-gränsen och skapar HMA.
Tar allt minne över 1088kB och gör tillgängligt för program
som följer standarden för XMS-minne.
När HIMEM.SYS installeras i CONFIG.SYS så står det bl.a. vid
uppstart:
Installerad A20 Handtagsnummer 1
64kB i det höga minnesområdet är tillgängligt.
A20 syftar på att adresslinje nummer 20 i processorn är åtkomlig för
DOS. Det är via den som HMA är åtkomlig, för DOS.
64kB är storleken på HMA (Fast inte fullt 64kB, det saknas nämligen
16B).
Ibland fungerar HIMEM.SYS inte så bra på vissa maskiner (t.ex. vissa
bärbara Toshiba, PS/2, m.m.). Man kan då starta HIMEM.SYS med
följande parameter:
/ Machine:[m]
[m] = maskintyp (se VIKTIGT.TXT i DOS).
/ Cpulock:ON Om datorn ändrar hastighet vid installation av
HIMEM.SYS kan man komma tillrätta med
problemet genom detta kommando. HIMEM.SYS
kommer att arbeta långsammare.
WINA20.386
Installationsprogrammet för DOS lägger en fil med namnet
WINA20.386 i rotkatalogen på hårddisken. Denna fil hanterar
eventuella konflikter som kan uppstå när DOS och WINDOWS (i
avancerat läge) försöker komma åt HMA samtidigt.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 9
EMM386.EXE
Minnesoptimering - Öka det lediga utrymmet i det konventionella
minnet genom att bl.a. nyttja de ej använda delarna i det övre minnet
Detta gick inte i tidigare DOS-versioner men DOS 5.0 (1991) öppnade
denna möjlighet under förutsättning att processorn var av modell
80386 eller bättre.
EMM386 kan öppna det reserverade minnesadresserna A000-AFFF
(640kB till 1024kB) i RAM för datalagring.
Tidigare användes EMM enbart till att skapa tillgång till expanderat
minne - EMS.
EMS-minne
När 640kB-gränsen var nådd,
kunde man installera ett minne via
ett expansions-kort - EMS-minne.
Man installerade då en minnes-
hanterare som använde
segmentadresserna D000-DFFF
för att skapa ett fönster mot EMS.
På detta sätt kunde man komma åt
minnet på expansionskortet (se
bild).
EMS är emellertid ett mycket
långsamt minne då all information måste passera genom ett 64kB
fönster till minneskapslarna som nås via den externa bussen.
Idag används inte tekniken med expanderat minne men en del
programvara kräver ibland expanderat minne. Då kan man skapa ett
emulerat EMS-minne i det utökade minnet genom att använda
EMM386.EXE.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 10
XMS-minne
Det minne som vi idag installerar i våra datorer, med DIP, SIP eller
SIMM (vanligast) installeras på moderkortet. Den del som lägger sig
ovanför 1MB gränsen kallas för det utökade minnet - XMS-minne.
UMB
Om man laddar in drivrutinen utan några parametrar så skapar
EMM386.EXE ett fönster mot ett emulerat EMS-ram. Vill man ha
både EMS- och UMB använder man sig av tillägget <RAM>, men vill
man bara ha UMB och inget EMS-minne använder man tillägget
<NOEMS>.
Det går alltså att ladda EMM386.EXE på tre olika sätt:
1. Utan tillägg, emulerar EMS-minne.
DEVICE=EMM386.EXE
2. Med tillägget <RAM>, emulerar EMS-minne och skapar
UMB.
DEVICE=EMM386.EXE RAM
3. Med tillägget <NOEMS>, skapar UMB.
DEVICE=EMM386.EXE NOEMS
Detta fungerar givetvis endast om först HIMEM.SYS är laddat.
DEVICE=HIMEM.SYS
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 11
INCLUDE OCH EXCLUDE
Vissa delar av det övre minnet är reserverat av VIDEO ROM samt av
BIOS ROM, men det går att ta tillbaka (inkludera) vissa minnes-
adresser som systemet inte har behov av. Segmenten mellan CC00 och
DFFF får man när man laddar EMM386.EXE NOEMS.
Om man använder VGA grafik så behöver man exempelvis inte
rutiner för MDA eller HERCULES som har segmentadress B000-
B7FF(se bild).
Om man vill nyttja RAM-
minnet där minnesadresserna
är förinställda för MDA/-
HERCULES-ROM så skriver
man ”I=” sen första och sista
adressen på blocket åtskiljt av
ett skiljetecken, när man
laddar in EMM386.EXE
NOEMS.
DEVICE=EMM386.EXE
I=B000-B7FF NOEMS
Vill man nyttja RAM-minnet
där minnesadresserna är
förinställda för 8514/A (IBM grafikstandard) Lägger man bara till
I=C800-CBFF.
Kommandoraden kommer då att se ut som följande:
DEVICE=EMM386.EXE I=B000-B7FF I=C800-CBFF NOEMS
EMM386.EXE NOEMS tar automatiskt ”tillbaka” CC00-DFFF och
det hänger med även vid en inkludering. Ibland anges ledigt RAM
från C800 istället för CC00. Detta syns då EMM386.EXE laddas in.
Ibland vill man installera ett kort, t.ex. nätverkskort i sin dator. Detta
kort kan vilja uppta en viss minnesadress och då måste man exkludera
denna för att inte få en konflikt. Om man installerar t.ex. ett GeniLan-
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 12
kort mod. E1166C och vill ha reda på var den "lägger" sig så skriver
man IPX /I för information om kortet.
Informationen som visas på skärmen kan då se ut som följande:
Novell IPX/SPX v3.10 (911201)
© Copyright 1985, 1991 Novell Inc. All Rights Reserved.
LAN Option: GeniLAN E-1166C v1.0 (911201)
Hardware Configuration: IRQ=5, IOBase=300h, MemBase=CC00h, no DMA
MemBase=CC00h betyder att minnesadressen börjar vid CC00
hexadecimalt. Normalt upptar ett nätverkskort 16kB vilket leder till att
slutadressen blir CFFF. Man får då komplettera EMM386.EXE med
en exkludering på adressen CC00 till CFFF. Man skriver ”X=” sen
första och sista adressen på blocket åtskiljt av ett skiljetecken, när man
laddar in EMM386.EXE NOEMS.
EMM386.EXE kommer då att se ut som följande med de tidigare
inkluderingarna:
DEVICE=EMM386.EXE I=B000-B7FF I=C800-CBFF X=CC00-CFFF
NOEMS
Det finns mer att plocka, men det är upp till användaren att se vad som
behövs eller inte. Har man en PS/2, använder man inte VGA etc.
Ibland kan man få nyttja lite (32kB) av RAM-minnet där
minnesadresserna är förinställda för BIOS (F000-F7FF), men det är
bara på vissa maskiner. Var noga med att se vad CMOS-
inställningarna avseende skuggning är satta om du nyttjar RAM-
minnet vid minnesadresser är förinställda för ROM så att det inte
konflikter uppstår.
Observera att inkluderingar inte får överlappa, därför anges sista
segmentadressen i blocket istället för första adressen i näst-
kommande block.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 13
DOS
När man nu har öppnat möjligheten att använda det övre minnet, så
måste man först förbereda DOS för användning av övre minnesblock
(UMB) i det övre minnet. Detta gör man genom att lägga till följande
rad i CONFIG.SYS:
DOS=UMB
Denna rad läses först men kan stå var som helst i CONFIG.SYS.
Man kan även flytta en del av DOS-kärnan från det konventionella
minnet till HMA, och på så sätt frigöra ungefär 50kB. Detta gör man
genom att lägga till följande rad i CONFIG.SYS:
DOS=HIGH
Vi kan även skriva dessa båda kommandon på samma rad:
DOS=HIGH,UMB
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 14
DEVICEHIGH OCH LOADHIGH
Nu kan man ladda in de drivrutiner och minnesresidenta program som
man vill ha, i det övre minnet. Drivrutiner laddar man i det
konventionella minnet genom att i CONFIG.SYS skriva ”DEVICE=”
men vill man ladda dem i UMA så måste man skriva
”DEVICEHIGH=”.
Låt oss säga att man vill ladda ANSI.SYS i det övre minnet. Före
minneshantering såg raden ut som följande:
DEVICE=C:\DOS\ANSI.SYS
Kommandoraden kommer att ha följande utseende efter det att man
laddar den i UMA:
DEVICEHIGH=C:\DOS\ANSI.SYS
Nu kan man fortsätta på samma sätt med resten av drivrutinerna i
CONFIG.SYS.
Observera att när man laddar upp i det övre minnet så läggs
drivrutinerna i det största sammanhängande blocket. Man bör med
andra ord lägga den största drivrutinen först, i den mån det är möjligt.
När vi laddar våra minnesresidenta program (TSR) i
AUTOEXEC.BAT till det övre minnet så skriver vi LOADHIGH.
Låt oss säga att man vill ladda DOSKEY i det övre minnet. Före
minneshantering såg raden ut som följande:
DOSKEY
Kommandoraden kommer att ha följande utseende efter det att man
laddar den i UMB:
LOADHIGH DOSKEY
eller förkortat:
LH DOSKEY
Nu kan man fortsätta på samma sätt med resten av de minnesresidenta
programmen (TSR) i AUTOEXEC.BAT.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 15
Externa kommandot MEM
När man minneshanterar måste man hela tiden hålla koll på hur
mycket minne man har frigjort och hur mycket sammanhängande
minnesyta man har tillgänglig. Detta gör man lättast med det externa
DOS-kommandot MEM.
MEM har följande syntax:
MEM [/CLASSIFY|/DEBUG|/FREE|/MODULE modulnamn]
[/PAGE]
MEM /? Visar:
Visar mängden upptaget respektive ledigt minne på datorn.
MEM [/CLASSIFY | /DEBUG | /FREE | /MODULE modulnamn] [/PAGE]
/CLASSIFY eller /C Klassificerar program efter
minnesanvändning. Visar
programstorleken, hur mycket minne
som används och storleken på
största tillgängliga minnesblock.
/DEBUG eller /D Visar status för alla
minnesmoduler, interna drivrutiner
och annan information.
/FREE eller /F Visar information om mängden ledigt
minne i både konventionellt och
övre minne.
/MODULE eller /M Visar en detaljerad lista över en
moduls minnesanvändning. Detta
alternativ måste följas av ett
modulnamn, alternativt separerat
från /M med ett kolon.
/PAGE eller /P Visar informationen en skärmbild i
taget.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 16
MEM /C kan visa följande:
Moduler som använder minne under 1 MB:
Namn Totalt Konventionellt övre minne
-------- ---------------- ---------------- ----------------
SYSTEM 19,136 (19K) 10,864 (11K) 8,272 (8K)
HIMEM 1,168 (1K) 1,168 (1K) 0 (0K)
EMM386 4,240 (4K) 4,240 (4K) 0 (0K)
DBLBUFF 2,976 (3K) 2,976 (3K) 0 (0K)
COMMAND 10,144 (10K) 0 (0K) 10,144 (10K)
COMMAND 6,976 (7K) 0 (0K) 6,976 (7K)
IFSHLP 2,864 (3K) 0 (0K) 2,864 (3K)
Ledigt 773,840 (756K) 635,744 (621K) 138,096 (135K)
Sammanfattning av minne:
Minnestyp Totalt Använt Ledigt
---------------- ----------- ----------- -----------
Konventionellt 655,360 19,616 635,744
övre 166,352 28,256 138,096
Reserverat 393,216 393,216 0
Utökat (XMS) 133,002,800 382,512 132,620,288
---------------- ----------- ----------- -----------
Totalt minne 134,217,728 823,600 133,394,128
Totalt under 1 M 821,712 47,872 773,840
Största körbara programstorlek 635,728 (621K)
Största lediga övre minnesblock 128,128 (125K)
MS-DOS är resident i det höga minnesområdet.
Med hjälp av MEM /F så ser du de olika minnesområden:
Ledigt konventionellt minne:
Segment Totalt
------- -----------------
004B0 400 (0K)
004C9 90,464 (88K)
01ADF 545,280 (533K)
Totalt ledigt: 636,144 (621K)
Ledigt övre minne:
Område Största lediga Totalt ledigt Total storlek
------ -------------- -------------- --------------
1 9,968 (10K) 9,968 (10K) 27,088 (26K)
2 128,128 (125K) 128,128 (125K) 139,264 (136K)
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 17
Se över CONFIG.SYS och AUTOEXEC.BAT
När man har laddat rutiner i det höga minnet och allt fungerar, så är
minneshanteringen inte över.
Man bör dels ta bort eller minska onödiga och minneskrävande rader i
CONFIG.SYS och AUTOEXEC.BAT och dels bör man snabba upp
systemet med Cache och skuggning av BIOS.
Man bör känna till:
FILES tar ungefär 53B för varje fil (Med Windows Rek. FILES=30
annars Rek. FILES=20)
BUFFERS tar ungefär 532B för varje buffert (Med SMARTDRV
installerad Rek BUFFERS=8)
Hårddiskstorlek
Antal Buffertar
Buffertstorlek i byte
<40MB
20
10640
40-79MB
30
15952
80-119MB
40
21264
>120MB
50
26576
BUFFERS kan anges med två värden. Det första värdet är antal
buffertar, det andra värdet (Intervall 1-8) är antalet read ahead-
buffertar, d.v.s. hur många sektorer av en fil som DOS skall läsa för
att snabba på kommande läsningar från samma fil.
LASTDRIVE tar ungefär 80B för var enhetsbokstav efter E.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 18
SHELL=C:\DOS\COMMAND.COM
Kommandot SHELL= definierar kommandotolken (Vanligast
COMMAND.COM) som skall användas vid DOS-starten. SHELL
definierar sökväg till kommandotolken och modifierar storleken på
DOS-miljön. I regel ligger COMMAND.COM i rotkatalogen men vill
man använda en annan kommandotolk eller om man har
kommandotolken på annat ställe så måste man använda kommandot
SHELL=.
Ex.
SHELL=C:\DOS\COMMAND.COM C:\DOS /P /E:1024
De övriga parametrarna talar om:
C:\DOS\COMMAND.COM Namnet på kommandotolken
C:\DOS Var DOS hittar kommandotolken när
delar av den måste laddas om.
/P Kopian av kommandotolken blir
permanent (Huvudkopia).
/E:1024 RAM-storlek som allokeras till
miljövariabler.
Denna kommandorad skriver man i CONFIG.SYS.
DOS-miljö är en area i minnet som DOS sätter upp vid starten och
använder för att lagra systemvariabler (miljövariabler).
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 19
T.ex.
PATH Lagrar de aktuella sökvägarna enligt det senaste
PATH-kommandot.
PROMPT Lagrar systemets prompt enligt det senaste
PROMT-kommandot.
APPEND Lagrar sökvägarna enligt det senaste
APPEND- kommandot om man har skrivit
APPEND /E i AUTOEXEC.BAT.
COMSPEC Lagrar sökvägen till kommandoprocessorn
COMMAND.COM (eller annan) så som den är
angiven i SHELL-kommandot (om detta finns).
DOS-miljön ligger i det
konventionella minnet,
mellan DOS-kärnan (som
innehåller en resident del
av COMMAND.COM)
och de minnesresidenta
TSR-programmen (som
t.ex. PRINT, DOSKEY,
KEYB).
Förutom den alltid
residenta delen av
COMMAND.COM,
finns det också en transient del av COMMAND.COM.
Denna del kan skrivas över av användarprogrammen och måste då
nytt läsas in i minnet efter det att användarprogrammen har avslutats.
Då den transienta delen av COMMAND.COM skall läsas in i minnet,
letar DOS efter sökvägen i DOS-miljön, som kan anges med variabeln
COMSPEC.
DOS kan inte expandera DOS-miljön efter det att minnesresidenta
program har laddats in. Därför måste man vid DOS-starten i SHELL-
kommandot ange ett tillräckligt stort utrymme.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 20
SMARTDRV
Vad gör SMARTDRV?
SMARTDRV skapar en
CACHE-buffert i RAM
och när man laddar in
filer och program från
hårddisken så kopierar
den använda delar till
RAM och på så sätt
”lurar” SMARTDRV systemet att RAM är hårddisken, så nästa gång
som man laddar in samma fil så hämtas den ifrån RAM-minnet. Det
finns följaktligen både läs och skriv-cache.
Cachen töms till hårddisken vid ledig tid (då processorn ej utför något
stort arbete) och om man skulle vara tvingad att avsluta WINDOWS
med <CTRL> + <ALT> + <DEL>.
Cachebuffertens storlek är olika vid olika stort utökat minne, men det
finns standardvärden:
Utökat minne
InitCacheStorlek
WinCacheStorlek
Upp till 1 MB
Allt utökat minne
Noll
Upp till 2 MB
1 MB
256 kB
Upp till 4 MB
1 MB
512 kB
Upp till 6 MB
2 MB
1 MB
6 MB eller mer
2 MB
2 MB
InitCacheStorlek - - - CacheStorlek i DOS
WinCacheStorlek - - - CacheStorlek i WINDOWS
Det gäller att skilja mellan SMARTDRV.SYS (DOS 5.0) och
SMARTDRV.EXE (DOS 6.X och WINDOWS 3.X).
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 21
SMARTDRV.SYS installeras i CONFIG.SYS med följande syntax:
DEVICE=[enhet]:[sökväg]SMARTDRV.SYS[InitCache]
[WinCache][/a]
Där /a talar om att man laddar SMARTDRV.SYS i det expanderade
minnet. Utelämnas parametern laddas SMARTDRV.SYS i det
utökade minnet.
När man laddar SMARTDRV.EXE så gör man det i
AUTOEXEC.BAT (DOS 6.X,WINDOWS 3.X), men man bör titta lite
i HELP.COM innan man kör igång. Det finns faktiskt lite att hålla
reda på.
Syntax:
[Enhet:] [sökväg] SMARTDRV [/X] [[enhet [+|-]...] [/U] [/C|/R]
[/F|/N] [/L] [/V|/Q|/S] [InitCachStorlek] [WinCachStorlek]]
[/E:ElelementStorlek] [/B:BuffertStorlek]
SMARTDRV delar sig gärna och om inget annat anges så laddar den
sig högt.
När du skriver SMARTDRV /S vid DOS-prompten så får du upp en
liten tabell. Skulle det vid Buffring stå ”JA” isåfall måste du tala om
för SMARTDRV i CONFIG.SYS att Dubbelbuffring krävs. Detta gör
du med kommandot:
DEVICE=C:\DOS\SMARTDRV.EXE /DOUBLE_BUFFER
Dubbelbuffring ger kompatibilitet för vissa styrenheter som inte kan
arbeta med minne tillhandahållet av EMM386 eller Windows körd i
avancerat läge.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 22
DOS 5.0
91-07-12
DOS 6.0
93-03-18
DOS 6.2
93-10-27,29
DOS 6.22
94-05-31
WINDOWS 3.1
92-03-21
WINDOWS 3.11
93-11-11
(Spexigt datum, men stämmer det?)
Man bör alltid använda de senaste versionerna av drivrutinerna,
därför bör man använda SMARTDRV.EXE om man t.ex.
använder både DOS 5.0 och WINDOWS 3.1.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 23
SHADOW - SKUGGA
Shadow BIOS, man
kan ”spegla” ROM i
RAM för att få
snabbare åtkomst till
BIOS eftersom RAM är
snabbare än ROM.
Men...
det fungerar inte alltid
eftersom skuggningen
kan hamna på fel ställe
och på så vis skapa konflikt.
Skuggningen utför man i SetUp:en.
Man bör tänka på hur stor del av ROM som man speglar, så att man
inte försöker spegla till del av RAM som man inkluderat i EMM386.
OBS!
Var försiktig med adresserna F000-F7FF
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 24
WINDOWS 3.X
WINDOWS 3.X vill ha mycket övre minne, och tar gärna hand om
minneshanteringen själv (vid installation) och kan köra applikationer i
XMS-minne (WINWORD, EXCEL m.m.). WINDOWS kan dela sig
och lägger sig i det konventionella, övre och det utökade minnet, och
arbetar enligt utsago bäst med stor mängd övre minne, vilket återstår
att bevisas.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 25
SAMMANFATTNING
HIMEM ger tillgång till XMS
HIMEM skapar HMA
EMM386 emulerar expanderat
minne EMS
EMM386 RAM emulerar
expanderat minne
EMS och skapar
UMB.
EMM386 NOEMS skapar
UMB
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 26
Kringgå startfiler med DOS 6.X
Man kan kringgå CONFIG.SYS och AUTOEXEC.BAT genom att
trycka på <F5>-tangenten eller hålla nere <SHIFT>-tangenten när
följande text visas:
Startar MS-DOS...
Datorn kommer då att starta med en grundkonfiguration istället för
den vanliga konfigurationen.
Bekräfta kommandon i CONFIG.SYS med DOS 6.X
Om man av någon anledning skulle vilja välja bort någon
kommandorad i CONFIG.SYS eller AUTOEXEC.BAT så kan man
göra det i DOS 6.X genom att trycka på <F8>-tangenten när följande
text visas:
Startar MS-DOS...
DOS kommer då att vilja ha en bekräftelse på varje kommandorad i
CONFIG.SYS.
När CONFIG.SYS har körts visas prompten:
Bearbeta AUTOEXEC.BAT [J,N]?
Om man vill att kommandona i Autoexec.bat skall utföras skriver man
J, om man vill att AUTOEXEC.BAT skall hoppas över skriver man
N.
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 27
Alternativ konfiguration med DOS 6.X
Genom att DOS 6.X ger användaren möjlighet att skapa en meny
innan CONFIG.SYS och AUTOEXEC.BAT körs, så kan man
verkligen optimera sina inställningar.
Första gången som man gör en meny i CONFIG.SYS så kan man
tycka att det verkar lite krångligt, men innehar man en viss kunskap
om batch-filer så skall det inte vara så krångligt.
Tillvägagångssätt i CONFIG.SYS:
Först måste man inom hakparenteser markera menyn.
[MENU]
Sedan bestämmer man vilken färg det skall vara på menyn.
MENUCOLOR X,Y (se tabell)
Därefter bestämmer man vilken post som skall starta om man inte
markerar ett visst menyval inom en viss tid (anges i sekunder).
MENUDEFAULT [post],[tid]
Nu kan man bestämma de valmöjligheter som man vill ha i sin meny.
MENUITEM=[post],[text]
exempel:
[MENU]
MENUCOLOR 7,1
MENUDEFAULT WIN,10
MENUITEM=DOS,DOS 6.0
MENUITEM=WIN,WINDOWS 3.11
Nu är själva menyn klar, nu måste man skapa de olika posterna.
[COMMON]
Denna post körs av alla poster. Här har man generella inställningar för
CD-rom, keyboard, ev minneshantering m.m..
[DOS]
Denna post körs av menyvalet DOS 6.0
[WIN]
Denna post körs av menyvalet WINDOWS 3.11
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 28
Exempel:
[MENU]
MENUCOLOR 7,1
MENUDEFAULT WIN,10
MENUITEM=DOS,DOS 6.0
MENUITEM=WIN,WINDOWS 3.11
[COMMON]
SHELL=C:\DOS\COMMAND.COM C:\DOS /E:1024 /P
C:\DRV\HIMEM.SYS
C:\DRV\EMM386.EXE I=B000-B7FF I=E000-EFFF NOEMS
DOS=HIGH,UMB
DEVICEHIGH=C:\DOS\SETVER.EXE
COUNTRY=046,437,C:\DOS\COUNTRY.SYS
FILES=30
BUFFERS=20
[DOS]
DEVICEHIGH=C:\DOS\ANSI.SYS
[WIN]
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 29
Tillvägagångssätt i AUTOEXEC.BAT:
Efter @ECHO OFF sätter man alla gemensamma kommandon och
avslutar med följande rad:
GOTO %CONFIG%
Därefter skapar man postetiketter med samma namn som man valt i
CONFIG.SYS.
:DOS
Avsluta varje post med ett kommando som ser till att man inte av
misstag kommer in i nästa post.
GOTO SLUT
Exempel:
@ECHO OFF
SET PROMPT=$P$G
SET PATH=C:\DOS;
LH C:\DOS\KEYB SV,,C:\DOS\KEYBOARD.SYS
C:\DRV\SMARTDRV
GOTO %CONFIG%
:DOS
LH C:\DRV\MOUSE
LH C:\DOS\DOSKEY
DIR *.BAT
GOTO SLUT
:WIN
SET PT=%PATH%
SET PATH=C:\WINDOWS;%PT%
WIN.COM
SET PATH=%PT%
SET PT=
GOTO SLUT
:SLUT
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 30
APPENDIX A
MENUCOLOR (TABELL)
FÄRG
MENYTEXT(X)
BAKGRUND(Y)
SVART
0
0
BLÅ
1
1
GRÖN
2
2
CYAN
3
3
RÖD
4
4
MAGENTA
5
5
BRUN
6
6
VIT
7
7
GRÅ
8
8
LYSANDE BLÅ
9
9
LYSANDE GRÖN
10
10
LYSANDE CYAN
11
11
LYSANDE RÖD
12
12
LYSANDE MAGENTA
13
13
GUL
14
14
LYSANDE VIT
15
15
d9bfafb3c416e9381ad77dc80447e6d8
©Copyright Peter Kan 2005-09-17 31
APPENDIX B
Minneskarta