DOS-minneshantering

Fysiska minnesområden i IBM PC-familjen

I IBM PC-kompatibel datoranvändning avser DOS-minneshantering programvara och tekniker som används för att ge applikationer tillgång till mer än 640 kibibyte (640*1024 byte) (KiB) av "konventionellt minne". Gränsen på 640 KiB var specifik för IBM PC och nära kompatibla; andra maskiner som kör MS-DOS hade andra gränser, till exempel kunde Apricot PC ha upp till 768 KiB och Sirius Victor 9000, 896 KiB. Minneshanteringen i IBM-familjen komplicerades av behovet av att bibehålla bakåtkompatibilitet med den ursprungliga PC-designen och real-mode DOS, samtidigt som datoranvändare kunde dra nytta av stora mängder lågkostnadsminne och nya generationer av processorer. Eftersom DOS har gett vika för Microsoft Windows och andra 32-bitars operativsystem som inte är begränsade av den ursprungliga godtyckliga gränsen på 640 KiB för IBM PC, kräver hantering av minnet på en persondator inte längre användaren att manuellt manipulera interna inställningar och parametrar för systemet.

Gränsen på 640 KiB medförde stor komplexitet för hårdvara och mjukvara avsedda att kringgå den; det fysiska minnet i en maskin kan organiseras som en kombination av basminne eller konventionellt minne (inklusive lägre minne), övre minne, högt minne (inte samma som övre minne), utökat minne och utökat minne, alla hanterade på olika sätt.

Konventionellt minne

Intel 8088- processorn som användes i den ursprungliga IBM-datorn hade 20 adresslinjer och kunde därför direkt adressera 1 MiB (2 20 byte) minne. Olika områden i detta adressutrymme tilldelades olika typer av minne som användes för olika ändamål. Från och med den lägsta änden av adressutrymmet hade PC:n läs/skrivminne ( RAM) installerat, vilket användes av DOS och applikationsprogram. Den första delen av detta minne installerades på systemets moderkort (i mycket tidiga maskiner, 64 KiB, senare reviderat till 256 KiB). Ytterligare minne kan läggas till med kort anslutna till expansionsplatserna; varje kort innehöll remmar eller omkopplare för att styra vilken del av adressutrymmet som kommer åt minnet och enheterna på det kortet.

På IBM PC var allt adressutrymme upp till 640 KiB tillgängligt för RAM. Denna del av adressutrymmet kallas "konventionellt minne" eftersom det är tillgängligt för alla versioner av DOS automatiskt vid uppstart. Segment 0, de första 64 kB av konventionellt minne, kallas även lågminnesområde . Normalt är expansionsminnet inställt på att vara sammanhängande i adressutrymmet med minnet på moderkortet. Om det fanns ett oallokerat gap mellan moderkortets minne och expansionsminnet, skulle minnet inte automatiskt upptäckas som användbart av DOS.

Övre minnesområdet

Det övre minnesområdet (UMA) hänvisar till adressutrymmet mellan 640 KiB och 1024 KiB (0xA0000–0xFFFFF). Regionen på 128 KiB mellan 0xA0000 och 0xBFFFF var reserverad för VGA- skärmminne och äldre SMM. Regionen på 128 KiB mellan 0xC0000 och 0xDFFFF var reserverad för enhetsalternativ- ROM, inklusive Video BIOS . De 64 KiB av adressutrymmet från 0xE0000 till 0xEFFFF var reserverat för BIOS eller Option ROM . IBM PC:n reserverade de översta 64 KiB av adressutrymmet från 0xF0000 till 0xFFFFF för BIOS och Cassette BASIC read-only memory (ROM).

Till exempel sprang den monokroma videoadapterns minnesyta från 704 till 736 KiB (0xB0000–0xB7FFF). Om endast en monokrom bildskärmsadapter användes, skulle adressutrymmet mellan 0xA0000 och 0xAFFFF kunna användas för RAM, vilket skulle gränsa till det konventionella minnet.

Systemets BIOS ROM måste vara i den övre änden av adressutrymmet eftersom CPU-startadressen är fixerad av processorns design. Startadressen laddas in i programräknare efter en hårdvaruåterställning och måste ha ett definierat värde som varar efter strömavbrott till systemet. Vid återställning eller start, laddar CPU:n adressen från system-ROM och hoppar sedan till en definierad ROM-plats för att börja utföra systemets självtest vid start och så småningom ladda ett operativsystem.

Eftersom ett expansionskort som en videoadapter, hårddiskkontroll eller nätverksadapter kunde använda allokering av minne i många av de övre minnesområdena, krävde konfigurationen av vissa kombinationer av kort noggrann läsning av dokumentationen, eller experiment, för att hitta kortinställningar och minneskartläggningar som fungerade. Att mappa två enheter för att använda samma fysiska minnesadresser kan resultera i ett avstannat eller instabilt system. Inte alla adresser i det övre minnesområdet användes i ett typiskt system; oanvända fysiska adresser skulle returnera odefinierade och systemberoende data om de åtkoms av processorn.

Utökat minne

ändrades applikationsprogram som kalkylblad och datorstödd ritning för att dra nytta av allt mer fysiskt minne i systemet. Virtuellt minne i 8088 och 8086 stöddes inte av processorns hårdvara, och dåtidens diskteknik skulle göra det för långsamt och krångligt för att vara praktiskt. Utökat minne var ett system som tillät applikationsprogram att komma åt mer RAM-minne än vad som är direkt synligt för processorns adressutrymme. Processen var en form av bankbyte . När extra RAM behövdes, drivrutinen tillfälligt göra en bit utökat minne tillgängligt för processorn; när data i det minnet uppdaterades kunde en annan del bytas in i processorns adressutrymme. För IBM PC och IBM PC/XT , med endast 20 adressrader, gjordes specialanpassade utökade minneskort innehållande kanske en megabyte, eller mer, utökat minne, med logik på kortet för att göra det minnet tillgängligt för processorn i definierade delar av 8088-adressutrymmet.

Tilldelning och användning av utökat minne var inte transparent för applikationsprogram. Applikationen var tvungen att hålla reda på vilken bank av utökat minne som innehöll en viss del av data, och när åtkomst till dessa data krävdes, var applikationen tvungen att begära (genom ett drivrutinsprogram) det utökade minneskortet för att mappa den delen av minnet till processorns adressutrymme. Även om applikationer kunde använda utökat minne med relativ frihet, var många andra programvarukomponenter såsom drivrutiner och terminate-and-stay-resident-program (TSR) fortfarande normalt begränsade till att finnas inom området 640K "konventionellt minne", som snart blev en ytterst knapphändig resurs.

80286 och området med högt minne

När IBM PC/AT introducerades hade den segmenterade minnesarkitekturen hos Intel-familjens processorer biprodukten att något mer än 1 MiB minne kunde adresseras i det "riktiga" läget. Eftersom 80286 hade mer än 20 adresslinjer, kunde vissa kombinationer av segment och offset peka in i minnet ovanför 0x0100000 (2 20 ) platsen. 80286 skulle kunna adressera upp till 16 MiB systemminne, och på så sätt ta bort beteendet hos minnesadresser som "omsluter sig". Eftersom den erforderliga adressraden nu fanns, skulle kombinationen F800:8000 inte längre peka på den fysiska adressen 0x0000000 utan den korrekta adressen 0x00100000.

Som ett resultat skulle vissa DOS-program inte längre fungera. För att upprätthålla kompatibilitet med PC- och XT-beteendet inkluderade AT en A20- linjeport (Gate A20) som gjorde att minnesadresserna på AT:n sveptes runt till lågt minne som de skulle ha på en 8088-processor. Denna grind kunde styras, till en början via tangentbordskontrollern , för att tillåta körande program som var designade för detta att få åtkomst till ytterligare 65 520 byte (64 KiB minne i verkligt läge . Vid uppstart aktiverar BIOS först A20 när alla räknas och testas av systemets minne och inaktiverar det innan kontrollen överförs till operativsystemet Aktivering av A20-linjen är ett av de första stegen som ett skyddat läge x86 -operativsystem gör i uppstartsprocessen, ofta innan kontrollen har överförts till kärnan från bootstrap (i fallet med Linux, till exempel).

High Memory Area ( HMA ) är RAM -området som består av de första 64 KiB, minus 16 byte , av det utökade minnet på en IBM PC/AT eller kompatibel mikrodator.

Ursprungligen var den logiska grinden en grind kopplad till Intel 8042- tangentbordskontrollern. Att kontrollera det var en relativt långsam process. Andra metoder har sedan lagts till för att möjliggöra mer effektiv multitasking av program som kräver denna omslutning med program som kommer åt hela systemets minne. Det fanns till en början en mängd olika metoder, men så småningom bestämde sig industrin för PS/2-metoden att använda en bit i port 92h för att styra A20-linjen.

Att koppla ur A20 skulle inte täcka alla minnesåtkomster över 1 MiB, bara de i intervallen 1 MiB, 3 MiB, 5 MiB, etc. Real mode- programvara brydde sig bara om området något över 1 MiB, så Gate A20 räckte.

Virtuellt 8086-läge , introducerat med Intel 80386 , gör att A20-omslutningen kan simuleras genom att använda processorns virtuella minnesfaciliteter: fysiskt minne kan mappas till flera virtuella adresser, vilket gör att minnet mappas vid den första megabyten av virtuellt minne kan mappas igen i den andra megabyten av virtuellt minne. Operativsystemet kan fånga upp ändringar av Gate A20 och göra motsvarande ändringar i det virtuella minnesadressutrymmet, vilket också gör effektiviteten av Gate-A20-växling irrelevant.

Den första användaren av HMA bland Microsoft-produkter var Windows 2.0 1987, som introducerade enhetsdrivrutinen HIMEM.SYS . Från och med version 5.0 av DR-DOS (1990) och av MS-DOS (1991), kunde delar av operativsystemet också laddas in i HMA, vilket frigör upp till 46 KiB konventionellt minne . Andra komponenter, såsom enhetsdrivrutiner och TSR, kan laddas in i det övre minnesområdet (UMA).

A20 hanterare

A20-hanteraren är programvara som kontrollerar åtkomsten till området med högt minne. Utökade minneshanterare tillhandahåller vanligtvis denna funktionalitet. I DOS hade högminnesområdeshanterare, såsom HIMEM.SYS , den extra uppgiften att hantera A20 och tillhandahöll ett API för att öppna/stänga A20. DOS själv skulle kunna använda området för en del av sina lagringsbehov och därigenom frigöra mer konventionellt minne för program. Denna funktion aktiverades av direktivet " DOS =HIGH" i konfigurationsfilen CONFIG.SYS .

A20 gate på senare processorer

Intel 80486 och Pentium lade till ett speciellt stift som heter A20M# , som när det hävdas lågt tvingar bit 20 av den fysiska adressen att vara noll för alla on-chip-cache eller externa minnesåtkomster. Detta var nödvändigt eftersom 80486 introducerade en on-chip cache, och därför var det inte längre möjligt att maskera denna bit i extern logik. Programvara behöver fortfarande manipulera grinden och måste fortfarande hantera extern kringutrustning (chipsetet ) för det.

80386 och efterföljande processorer

Intel-processorer från 386 och framåt tillät ett virtuellt 8086-läge , vilket förenklade hårdvaran som krävs för att implementera utökat minne för DOS-applikationer. Utökade minneshanterare som Quarterdecks QEMM- produkt och Microsofts EMM386 stödde den utökade minnesstandarden utan krav på speciella minneskort.

På 386 och efterföljande processorer kan minneshanterare som QEMM flytta huvuddelen av koden för en förare eller TSR till det utökade minnet och ersätta det med ett litet fingerhåll som kunde komma åt koden för det utökade minnet. De kan analysera minnesanvändning för att upptäcka drivrutiner som krävde mer RAM under uppstart än de gjorde senare, och återställa och återanvända minnet som inte längre behövdes efter start. De kan till och med mappa om områden i minnet som normalt används för minnesmappade I/O. Många av dessa knep involverade antaganden om hur drivrutiner och andra komponenter fungerar. I själva verket kan minneshanterare omvända och modifiera andra leverantörers kod i farten. Som man kunde förvänta sig fungerade inte alltid sådana knep. Därför inkorporerade minneshanterare också mycket utarbetade system med konfigurerbara alternativ, och bestämmelser för återställning om ett valt alternativ skulle göra datorn ostartbar (en ofta förekommande händelse).

Att installera och konfigurera en minneshanterare kan innebära timmar av experimenterande med alternativ, upprepad omstart av maskinen och testning av resultaten. Men konventionellt minne var så värdefullt att PC-ägare ansåg att sådan tid var väl använd om resultatet var att frigöra 30 KiB eller 40 KiB av konventionellt minnesutrymme.

Utökat minne

I sammanhanget med IBM PC-kompatibla datorer avser utökat minne minne i adressutrymmet för 80286 och efterföljande processorer, utöver gränsen på 1 megabyte som anges av de 20 adressraderna i 8088 och 8086. Sådant minne är inte direkt tillgängligt för DOS applikationer som körs i det så kallade "riktiga läget" för 80286 och efterföljande processorer. Detta minne är endast tillgängligt i de skyddade eller virtuella lägena för 80286 och högre processorer.

Se även

externa länkar